"""
封装
    概述：
        Python中的封装： 隐藏对象的属性和方法的实现细节，仅仅对外提供公共的访问方式

    现实世界中的封装 ： 电脑  手机  插线板
    名词解释：
        问题1：怎么隐藏？
            通过 __ 实现的， 例如: __属性名  __方法名()
        问题2： 私有后如何访问私有的属性呢？
            类内：可以直接调用，无所谓
            类外：不能直接调用，必须通过类提供的公共的访问方式来调用
                注意：公共的访问方式  get_xxx()  set_xxx() 函数
        问题3：get_xxx()  set_xxx() 函数必须成对出现吗？
            不一定，看具体需求，如果要获取值就用get_xxx(),如果要设置值就用set_xxx()
            如果不明确具体需求，就都写


"""
class Student:

    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def __speak(self):
        print(f'{self.__name}说话')

    def get_name(self):
        return self.__name

    def set_name(self, name):
        self.__name = name

    def get_age(self):
        return self.__age

    def set_age(self, age):
        if age < 0 or age > 100:
            raise ValueError('您设置的年龄不正常')
        self.__age = age

if __name__ == '__main__':
    s = Student("刘千琪", 18)
    # s.speak() # 私有方法不允许访问
    # print(s.name) # 私有属性不允许访问
    # print(s.age) # 私有属性不允许访问

    s.set_name('崔龙腾')
    print(s.get_name())

    s.set_age(-22)
    print(s.get_age())
